package com.wei.czz.framework.store.service;

import com.wei.czz.common.vo.common.UpdateStatusVo;
import com.wei.czz.common.vo.store.StoreAccountVo;
import com.wei.czz.framework.store.entity.StoreAccountEntity;

import java.util.Collection;
import java.util.List;

/**
 * 商店账户表
 *
 * @author wei
 * email 945158190@gmail.com
 * date 2023-11-22 17:44:15
 */
public interface StoreAccountService {

    /**
     * 添加商店账户操作
     * @param storeAccountVo 参数对象
     */
    Long saveStoreAccount(StoreAccountVo storeAccountVo);

    /**
     * 添加商店账户操作
     * @param storeAccount 商店账户对象
     */
    Long saveStoreAccount(StoreAccountEntity storeAccount);

    /**
     * 复制商店账户操作
     * @param preStoreId 上一个商店主键
     * @param storeId    新商店主键
     */
    void copyStoreAccount(Long preStoreId, Long storeId);

    /**
     * 获取商店默认账户列表操作
     * @param storeIdList 商店主键列表
     * @return 账户列表
     */
    List<StoreAccountEntity> getStoreDefaultAccountList(List<Long> storeIdList);

    /**
     * 获取商店默认账户操作
     * @param storeId 商店主键
     * @return 商店账户对象
     */
    StoreAccountEntity getStoreDefaultAccount(Long storeId);

    /**
     * 获取商店所有账户操作
     * @param storeId 商店主键
     * @return 商店账户列表
     */
    List<StoreAccountEntity> getStoreAccountList(Long storeId);

    /**
     * 获取商店账户下一个序号操作
     * @param storeId 商店主键
     * @return 序号
     */
    Integer getNextSort(Long storeId);

    /**
     * 获取商店正在审核中的账户操作
     * @param storeId 商店主键
     * @return 商店账户对象
     */
    StoreAccountEntity getStoreAuditAccount(Long storeId);

    /**
     * 批量获取商店正在审核中的账户操作
     * @param storeIdCollection 商店主键集合
     * @param deleteStatus      删除状态
     * @return 商店账户对象列表
     */
    List<StoreAccountEntity> batchGetStoreAuditAccount(Collection<Long> storeIdCollection, Integer deleteStatus);

    /**
     * 获取商店账户操作
     * @param id 主键
     * @return 商店账户对象
     */
    StoreAccountEntity getStoreAccount(Long id);

    /**
     * 更新商店账户操作
     * @param storeAccount 商店账户对象
     */
    void updateStoreAccount(StoreAccountEntity storeAccount);

    /**
     * 修改商店账户状态操作
     * @param updateStatusVo 参数对象
     */
    void updateStoreAccountStatus(UpdateStatusVo updateStatusVo);

    /**
     * 删除商店账户操作
     * @param id 主键
     */
    void deleteStoreAccount(Long id);

}

